//package com.hippo.drools.config;
//
//import org.kie.api.KieBase;
//import org.kie.api.KieServices;
//import org.kie.api.builder.KieBuilder;
//import org.kie.api.builder.KieFileSystem;
//import org.kie.api.builder.KieRepository;
//import org.kie.api.runtime.KieContainer;
//import org.kie.api.runtime.KieSession;
//import org.kie.internal.io.ResourceFactory;
//import org.kie.spring.KModuleBeanFactoryPostProcessor;
//import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.core.io.Resource;
//import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
//import org.springframework.core.io.support.ResourcePatternResolver;
//
//import java.io.IOException;
//
///**
// * @ClassName DroolsConfig
// * @Description TODO drools规则引擎配置
// * @Author tangxl
// * @create 2023-05-08 09:08
// **/
//@Configuration
//public class DroolsConfig {
//    /**
//     * 规则文件路径
//     */
//    private static final String RULES_PATH = "classpath*:droolsRule/*.*";
//    /**
//     * KieServices是一个单例的工厂类，它的主要功能是用来创建其它的kie对象，比如KieContainer、KieRepository、KieSession等
//     */
//    private final KieServices kieServices = KieServices.Factory.get();
//
//    /**
//     * 获取规则文件，并将规则文件写入到规则引擎系统内
//     * @return
//     * @throws IOException
//     */
//    @Bean
//    @ConditionalOnMissingBean(KieFileSystem.class)
//    public KieFileSystem kieFileSystem() throws IOException
//    {
//        KieFileSystem kieFileSystem = getKieServices().newKieFileSystem();
//        for (Resource file : getRuleFiles())
//        {
//            kieFileSystem.write(ResourceFactory.newClassPathResource(RULES_PATH
//                    + file.getFilename(), "UTF-8"));
//        }
//        return kieFileSystem;
//    }
//
//    /**
//     * 加载获取规则文件
//     * @return
//     * @throws IOException
//     */
//    private Resource[] getRuleFiles() throws IOException
//    {
//        ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
//        return resourcePatternResolver.getResources("classpath*:" + RULES_PATH
//                + "**/*.*");
//    }
//
//    /**
//     * 设置KieContainer规则容器
//     * @return
//     * @throws IOException
//     */
//    @Bean
//    @ConditionalOnMissingBean(KieContainer.class)
//    public KieContainer kieContainer() throws IOException
//    {
//        // 获取仓库
//        final KieRepository kieRepository = getKieServices().getRepository();
//        //设置时间格式
//        System.setProperty("drools.dateformat","yyyy-MM-dd HH:mm");
//        kieRepository.addKieModule(kieRepository::getDefaultReleaseId);
//        KieBuilder kieBuilder = getKieServices().newKieBuilder(kieFileSystem());
//        kieBuilder.buildAll();
//        return getKieServices().newKieContainer(
//                kieRepository.getDefaultReleaseId());
//    }
//
//    /**
//     * 获取KieServices规则服务
//     * @return
//     */
//    private KieServices getKieServices()
//    {
//        return KieServices.Factory.get();
//    }
//
//    /**
//     * 设置KieBase 规则库
//     * @return
//     * @throws IOException
//     */
//    @Bean
//    @ConditionalOnMissingBean(KieBase.class)
//    public KieBase kieBase() throws IOException
//    {
//        return kieContainer().getKieBase();
//    }
//
//    /**
//     * 设置KieSession规则会话
//     * @return
//     * @throws IOException
//     */
//    @Bean
//    @ConditionalOnMissingBean(KieSession.class)
//    public KieSession kieSession() throws IOException
//    {
//        return kieContainer().newKieSession();
//    }
//
//    /**
//     * 设置KModuleBeanFactoryPostProcessor，用于将KieBase和KieSession注入到Spring容器中
//     * @return
//     */
//    @Bean
//    @ConditionalOnMissingBean(KModuleBeanFactoryPostProcessor.class)
//    public KModuleBeanFactoryPostProcessor kiePostProcessor()
//    {
//        return new KModuleBeanFactoryPostProcessor();
//    }
//}
